#ifndef ENSEMBLECAPACITESRACIALES_H
#define ENSEMBLECAPACITESRACIALES_H

#include "CapaciteRaciale.h"

#include <vector>

/**
 * Classe qui implémente un ensemble de capacités raciales. Il s'agit
 * en fait d'une instance de CapaciteRaciale spécialisée, car une
 * ensemble est caractérisé par un Nom et un Prix.
 *
 * @author Johan "Solo" Luisier
 */
class EnsembleCapacitesRaciales : public CapaciteRaciale
{
 public:
  EnsembleCapacitesRaciales( const std::string& capa = "",
			     const unsigned& prix = 0,
			     const std::vector< unsigned >& membres =
			     std::vector< unsigned >() );
  EnsembleCapacitesRaciales( const std::string& capa, const unsigned& prix,
			     const std::vector< unsigned >& membres,
			     const std::vector< unsigned >& exclus );
  EnsembleCapacitesRaciales( const EnsembleCapacitesRaciales& ensemble );
  ~EnsembleCapacitesRaciales();
  EnsembleCapacitesRaciales& operator=( const EnsembleCapacitesRaciales& ens );
  const std::vector< unsigned >* membresPtr() const;
  const std::vector< unsigned >& membres() const;
  const std::vector< unsigned >* exclusPtr() const;
  const std::vector< unsigned >& exclus() const;
 protected:
  /**
   * Conteneur des capacités raciales inclues dans l'ensemble, càd la
   * liste des capacités raciales (donnée par leur indice) accessible
   * lorsqu'on choisit l'ensemble.
   */
  std::vector< unsigned > Membres;
  /**
   * Conteneur des capacités raciales qui ne peuvent être
   * sélectionnées une fois l'ensemble courant choisi. Cela est fair
   * pour éviter que l'on traffique un ensemble.
   */
  std::vector< unsigned > Exclus;
};

#endif // ENSEMBLECAPACITESRACIALES_H
